昨天已經把 CR 完成了,今天將會完成CRUD中的UD,那我們就開始吧!!
U 代表著更新 (update),這個功能其實就是把昨天 CR 結合再一起的功能,要先透過找到要修改的資料,並且把新的資料儲存在資料庫內,一樣到 main()
來增加相關的程式:
r.PUT("/posts/:id", func (c *gin.Context) {
id := c.Param("id")
var post model.Post
if err := database.DB.First(&post, id).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{
"error": "Failed to fetch posts",
})
return
}
if err := c.ShouldBindJSON(&post); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "Bad request data",
})
return
}
if err := database.DB.Save(&post).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Failed to update post",
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "Post updated successfully",
})
})
程式碼講解:
/posts/:id
,使用 PUT 方法來更新文章。post
的變數,用於存儲從資料庫檢索到的文章。First(&post, id)
從資料庫中根據提供的 id 查找並檢索相應的文章。如果找不到指定 id 的文章,就會回應一個未找到的訊息。ShouldBindJSON(&post)
將請求中的 JSON 數據綁定到 post 變數。如果解析 JSON 數據時出錯,回應一個請求數據無效的訊息。Save(&post)
將更新後的文章保存回資料庫。如儲存時出現錯誤,回應一個內部服務器錯誤的訊息。打開 Postman,將請求改成 PUT 並且輸入 http://127.0.0.1:8080/posts/1 ,接著, Send。
用昨天的 Read 來看看是不是真的修改了,把請求改成 GET。
確實已經修改成剛剛修改的內容了。
D 代表著刪除 (Delete),刪除也很簡單,概念跟更新很像,也是要先找到要刪除的貼文,接著將他刪除掉。在 main()
增加刪除貼文的程式碼:
r. DELETE("posts/:id", func(c *gin.Context) {
id := c.Param("id")
if err := database.DB.Delete(&model.Post{}, id).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{
"error": "Post not found",
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "Delete post successfully",
})
})
程式碼解釋:
/posts/:id
,使用 DELETE
請求來刪除文章。id
參數,以便識別要刪除的文章。Delete(&model.Post{}, id)
方法從資料庫中刪除指定 id
的文章。打開 Postman,將請求改成 Delete 並且輸入 http://127.0.0.1:8080/posts/1 ,並 Send。
出現這個回應就代表成功刪除了。我們再回去 Read 看看這邊貼文是否被刪除了。
這邊可以看到,回應為 Failed to fetch posts
,這就代表已經成功刪除貼文了。
今天的內容已經更新到 Github了,到這邊 CRUD 也介紹完了,相信大家都已經成功完成了,當然 Gin 和 GORM 還有很多功能還沒說完,這部分就交給各位去慢慢摸索囉!